<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>数组练习求和</title>
	</head>
	<body>
		<h4>输出描述:</h4>
		<p>计算给定数组 arr 中所有元素的总和</p>
		<span>sum([ 1, 2, 3, 4 ])</span>
		<script type="text/javascript">
//			常规循环
			function sum(arr){
				var s=0;
				for(var i=0;i<arr.length;i++){
					s+=arr[i];
				}
				return s;
			}
//			不考虑算法复杂度，用递归做：
			function sum(arr) {
			    var len = arr.length;
			    if(len == 0){
			        return 0;
			    } else if (len == 1){
			        return arr[0];
			    } else {
			        return arr[0] + sum(arr.slice(1));
			    }
			}
			//函数式编程 map-reduce：
			function sum1(arr){
				return arr.reduce(function(preValue,curValue,index,arr){
					 preValue + curValue;
				})
			}
			console.log(sum1([ 1, 2, 3, 4 ]));
//			forEach遍历：
//			forEach方法中的function回调支持3个参数，
//			第1个是遍历的数组内容；第2个是对应的数组索引，第3个是数组本身
			function sum(arr){
				var s=0;
				arr.forEach(function(value,index,arr){
					s+=value;
				});
				return s;
			}
//			eval() 了解他，远离他
//			function sum(arr){
//				return eval(arr.join("+"));
//			}
			alert(sum([ 1, 2, 3, 4 ]));
		</script>
	</body>
</html>
